package com.eastfair.matching.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.eastfair.core.base.entity.Entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import static com.eastfair.core.utils.DateUtils.DEFAULT_DATE_TIME_FORMAT;
import com.eastfair.annotation.model.EchoVO;
import com.eastfair.matching.enumeration.ComplementServiceItemServiceStateEnum;
import com.eastfair.matching.enumeration.ComplementServiceItemAuditStateEnum;

import static com.baomidou.mybatisplus.annotation.SqlCondition.LIKE;

/**
 * <p>
 * 实体类
 * 服务项
 * </p>
 *
 * @author lyw
 * @since 2022-07-15
 */
@Data
@NoArgsConstructor
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("ma_complement_service_item")
@ApiModel(value = "ComplementServiceItem", description = "服务项")
@AllArgsConstructor
public class ComplementServiceItem extends Entity<Long> implements EchoVO {

    private static final long serialVersionUID = 1L;
    @TableField(exist = false)
    private Map<String, Object> echoMap = new HashMap<>();
    /**
     * 来源服务id
     */
    @ApiModelProperty(value = "来源服务id")
    @TableField(value = "source_id")
    @Excel(name = "来源服务id")
    private Long sourceId;

    /**
     * 是否启用（确认状态）：1是 已确认；0否 未确认
     */
    @ApiModelProperty(value = "是否启用（确认状态）：1是 已确认；0否 未确认")
    @TableField(value = "is_enabled")
    @Excel(name = "是否启用（确认状态）：1是 已确认；0否 未确认")
    private Integer isEnabled;

    /**
     * 是否删除：1是；0否
     */
    @ApiModelProperty(value = "是否删除：1是；0否")
    @TableField(value = "is_deleted")
    @Excel(name = "是否删除：1是；0否")
    private Integer isDeleted;

    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @TableField(value = "project_id")
    @Excel(name = "项目id")
    private Long projectId;

    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    @TableField(value = "subsystem_id")
    @Excel(name = "子系统id")
    private Long subsystemId;

    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    @TableField(value = "tenant_id")
    @Excel(name = "租户id")
    private Long tenantId;

    /**
     * 服务名称
     */
    @ApiModelProperty(value = "服务名称")
    @Size(max = 255, message = "服务名称长度不能超过255")
    @TableField(value = "service_name", condition = LIKE)
    @Excel(name = "服务名称")
    private String serviceName;

    /**
     * 服务编号
     */
    @ApiModelProperty(value = "服务编号")
    @Size(max = 64, message = "服务编号长度不能超过64")
    @TableField(value = "service_no", condition = LIKE)
    @Excel(name = "服务编号")
    private String serviceNo;

    /**
     * 服务图片
     */
    @ApiModelProperty(value = "服务图片")
    @Size(max = 255, message = "服务图片长度不能超过255")
    @TableField(value = "pic_url", condition = LIKE)
    @Excel(name = "服务图片")
    private String picUrl;

    /**
     * 服务分类id
     */
    @ApiModelProperty(value = "服务分类id")
    @TableField(value = "service_category_id")
    @Excel(name = "服务分类id")
    private Long serviceCategoryId;

    /**
     * 计量单位 字典维护
     */
    @ApiModelProperty(value = "计量单位 字典维护")
    @Size(max = 255, message = "计量单位 字典维护长度不能超过255")
    @TableField(value = "cal_unit", condition = LIKE)
    @Excel(name = "计量单位 字典维护")
    private String calUnit;

    /**
     * 最小预定量
     */
    @ApiModelProperty(value = "最小预定量")
    @TableField(value = "min_allocated_num")
    @Excel(name = "最小预定量")
    private Integer minAllocatedNum;

    /**
     * 服务部门id/服务商id/主场id
     */
    @ApiModelProperty(value = "服务部门id/服务商id/主场id")
    @TableField(value = "service_provider_id")
    @Excel(name = "服务部门id/服务商id/主场id")
    private Long serviceProviderId;

    /**
     * 供应商类型 字典维护
     */
    @ApiModelProperty(value = "供应商类型 字典维护")
    @Size(max = 255, message = "供应商类型 字典维护长度不能超过255")
    @TableField(value = "service_provider_type", condition = LIKE)
    @Excel(name = "供应商类型 字典维护")
    private String serviceProviderType;

    /**
     * 服务状态  #{DEFAULT:默认;ON_SHELVES:已上架;UNDER_SHELVES:已下架}
     */
    @ApiModelProperty(value = "服务状态  #{DEFAULT:默认;ON_SHELVES:已上架;UNDER_SHELVES:已下架}")
    @TableField(value = "service_state")
    @Excel(name = "服务状态  #{DEFAULT:默认;ON_SHELVES:已上架;UNDER_SHELVES:已下架}", replace = {"默认_DEFAULT", "已上架_ON_SHELVES", "已下架_UNDER_SHELVES",  "_null"})
    private ComplementServiceItemServiceStateEnum serviceState;

    /**
     * 审核状态 #{DEFAULT:默认;APPROVED:已审核;NOT_APPROVED:未审核}
     */
    @ApiModelProperty(value = "审核状态 #{DEFAULT:默认;APPROVED:已审核;NOT_APPROVED:未审核}")
    @TableField(value = "audit_state")
    @Excel(name = "审核状态 #{DEFAULT:默认;APPROVED:已审核;NOT_APPROVED:未审核}", replace = {"默认_DEFAULT", "已审核_APPROVED", "未审核_NOT_APPROVED",  "_null"})
    private ComplementServiceItemAuditStateEnum auditState;


    @Builder
    public ComplementServiceItem(Long id, Long createdBy, LocalDateTime createTime, Long updatedBy, LocalDateTime updateTime, 
                    Long sourceId, Integer isEnabled, Integer isDeleted, Long projectId, Long subsystemId, 
                    Long tenantId, String serviceName, String serviceNo, String picUrl, Long serviceCategoryId, String calUnit, 
                    Integer minAllocatedNum, Long serviceProviderId, String serviceProviderType, ComplementServiceItemServiceStateEnum serviceState, ComplementServiceItemAuditStateEnum auditState) {
        this.id = id;
        this.createdBy = createdBy;
        this.createTime = createTime;
        this.updatedBy = updatedBy;
        this.updateTime = updateTime;
        this.sourceId = sourceId;
        this.isEnabled = isEnabled;
        this.isDeleted = isDeleted;
        this.projectId = projectId;
        this.subsystemId = subsystemId;
        this.tenantId = tenantId;
        this.serviceName = serviceName;
        this.serviceNo = serviceNo;
        this.picUrl = picUrl;
        this.serviceCategoryId = serviceCategoryId;
        this.calUnit = calUnit;
        this.minAllocatedNum = minAllocatedNum;
        this.serviceProviderId = serviceProviderId;
        this.serviceProviderType = serviceProviderType;
        this.serviceState = serviceState;
        this.auditState = auditState;
    }

}
